
[dbo].[asi_HierarchyDemoteBranch]
CREATE PROCEDURE [dbo].[asi_HierarchyDemoteBranch] @hierarchyKey uniqueidentifier AS
DECLARE
@NewParentSort int, @Depth int, @LowSort int, @HighSort int, @RootHierarchyKey uniqueidentifier
BEGIN
SELECT @RootHierarchyKey = a.RootHierarchyKey, @Depth=a.Depth, @LowSort = a.SortOrder, @NewParentSort = ISNULL(Max(b.SortOrder),0)
FROM Hierarchy a LEFT OUTER JOIN Hierarchy b
ON a.RootHierarchyKey = b.RootHierarchyKey
AND a.SortOrder > b.SortOrder
AND a.Depth = b.Depth
AND a.ParentHierarchyKey = b.ParentHierarchyKey
WHERE a.HierarchyKey = @hierarchyKey
GROUP BY a.RootHierarchyKey, a.Depth, a.SortOrder
if @NewParentSort IS NULL
RAISERROR ('Cannot Demote. No older sibling available',16,1)
SELECT @HighSort = Min(SortOrder)
FROM Hierarchy
WHERE RootHierarchyKey = RootHierarchyKey
AND SortOrder > @LowSort
AND Depth <= @Depth
IF @HighSort IS NOT NULL
BEGIN
UPDATE Hierarchy
SET Depth = Depth + 1
WHERE RootHierarchyKey = @RootHierarchyKey
AND SortOrder >= @LowSort
AND SortOrder < @HighSort
END
ELSE
BEGIN
UPDATE Hierarchy
SET Depth = Depth + 1
WHERE RootHierarchyKey = @RootHierarchyKey
AND SortOrder >= @LowSort
END
UPDATE Hierarchy
SET ParentHierarchyKey = (
SELECT HierarchyKey
FROM Hierarchy
WHERE RootHierarchyKey = @RootHierarchyKey
AND SortOrder = @NewParentSort)
WHERE HierarchyKey = @hierarchyKey
END
GO